/* app_math_e_example.c */

#include "app.h"
#include "app_math_data.h"


/*******************************************************************************
 * Definitions
 ******************************************************************************/

/*******************************************************************************
 * Variables
 ******************************************************************************/

/*******************************************************************************
 * Prototypes
 ******************************************************************************/

/*******************************************************************************
 * Code
 ******************************************************************************/
/* ln(x), e^(x), e^(-x). */
void app_arm_math_ln_f32_example(void)
{
    PRINTF("%s()\r\n", __func__);

    /* 清零输出矩阵数据. */
    memset(arm_math_output_V_f32, 0, sizeof(float32_t) * MATH_INPUT_ARRAY_LEN );

    /* 开始计算. */
    TimerCount_Start(); /* 开始计时. */
    for (uint32_t i = 0u; i < MATH_INPUT_ARRAY_LEN; i++)
    {
        arm_math_output_V_f32[i] = log(arm_math_input_V2_f32[i]);
        /* C语言中以log(x)表示ln(x). */
    }
    TimerCount_Stop(tick_counter_val); /* 结束计时. */

    /* 打印计算结果. */
    for (uint32_t i = 0u; i < MATH_INPUT_ARRAY_LEN; i++)
    {
        if ( (i % 8) == 0 )
        {
            PRINTF("\r\n");
        }
        PRINTF("%8f, ", arm_math_output_V_f32[i]);
    }
    PRINTF("\r\n");
    PRINTF("done with %d us.\r\n\r\n", tick_counter_val/96u); /* 打印计算时间. */
}

void app_arm_math_exp_f32_example(void)
{
    PRINTF("%s()\r\n", __func__);

    /* 清零输出矩阵数据. */
    memset(arm_math_output_V_f32, 0, sizeof(float32_t) * MATH_INPUT_ARRAY_LEN );

    /* 开始计算. */
    TimerCount_Start(); /* 开始计时. */
    for (uint32_t i = 0u; i < MATH_INPUT_ARRAY_LEN; i++)
    {
        arm_math_output_V_f32[i] = exp(arm_math_input_V1_f32[i]);
    }
    TimerCount_Stop(tick_counter_val); /* 结束计时. */

    /* 打印计算结果. */
    for (uint32_t i = 0u; i < MATH_INPUT_ARRAY_LEN; i++)
    {
        if ( (i % 8) == 0 )
        {
            PRINTF("\r\n");
        }
        PRINTF("%8f, ", arm_math_output_V_f32[i]);
    }
    PRINTF("\r\n");
    PRINTF("done with %d us.\r\n\r\n", tick_counter_val/96u); /* 打印计算时间. */
}

void app_arm_math_exp_negative_f32_example(void)
{
    PRINTF("%s()\r\n", __func__);

    /* 清零输出矩阵数据. */
    memset(arm_math_output_V_f32, 0, sizeof(float32_t) * MATH_INPUT_ARRAY_LEN );

    /* 开始计算. */
    TimerCount_Start(); /* 开始计时. */
    for (uint32_t i = 0u; i < MATH_INPUT_ARRAY_LEN; i++)
    {
        arm_math_output_V_f32[i] = exp(-arm_math_input_V1_f32[i]);
    }
    TimerCount_Stop(tick_counter_val); /* 结束计时. */

    /* 打印计算结果. */
    for (uint32_t i = 0u; i < MATH_INPUT_ARRAY_LEN; i++)
    {
        if ( (i % 8) == 0 )
        {
            PRINTF("\r\n");
        }
        PRINTF("%8f, ", arm_math_output_V_f32[i]);
    }
    PRINTF("\r\n");
    PRINTF("done with %d us.\r\n\r\n", tick_counter_val/96u); /* 打印计算时间. */
}

void app_pq_math_ln_f32_example(void)
{
    PRINTF("%s()\r\n", __func__);

    /* 清零输出矩阵数据. */
    memset(arm_math_output_V_f32, 0, sizeof(float32_t) * MATH_INPUT_ARRAY_LEN );

    /* 使用PowerQuad计算. */
    PQ_SetFormat(POWERQUAD, kPQ_CP_MTX, kPQ_Float);
    TimerCount_Start();  /* 开始计时. */
    PQ_VectorLnF32(  arm_math_input_V2_f32,
                     arm_math_output_V_f32,
                     MATH_INPUT_ARRAY_LEN );
    TimerCount_Stop(tick_counter_val); /* 结束计时. */

    /* 打印计算结果. */
    for (uint32_t i = 0u; i < MATH_INPUT_ARRAY_LEN; i++)
    {
        if ( (i % 8) == 0 )
        {
            PRINTF("\r\n");
        }
        PRINTF("%8f, ", arm_math_output_V_f32[i]);
    }
    PRINTF("\r\n");
    PRINTF("done with %d us.\r\n\r\n", tick_counter_val/96u); /* 打印计算时间. */
}

void app_pq_math_exp_f32_example(void)
{
    PRINTF("%s()\r\n", __func__);

    /* 清零输出矩阵数据. */
    memset(arm_math_output_V_f32, 0, sizeof(float32_t) * MATH_INPUT_ARRAY_LEN );

    /* 使用PowerQuad计算. */
    PQ_SetFormat(POWERQUAD, kPQ_CP_MTX, kPQ_Float);
    TimerCount_Start();  /* 开始计时. */
    PQ_VectorEtoxF32(  arm_math_input_V1_f32,
                       arm_math_output_V_f32,
                       MATH_INPUT_ARRAY_LEN );
    TimerCount_Stop(tick_counter_val); /* 结束计时. */

    /* 打印计算结果. */
    for (uint32_t i = 0u; i < MATH_INPUT_ARRAY_LEN; i++)
    {
        if ( (i % 8) == 0 )
        {
            PRINTF("\r\n");
        }
        PRINTF("%8f, ", arm_math_output_V_f32[i]);
    }
    PRINTF("\r\n");
    PRINTF("done with %d us.\r\n\r\n", tick_counter_val/96u); /* 打印计算时间. */
}

void app_pq_math_exp_negative_f32_example(void)
{
    PRINTF("%s()\r\n", __func__);

    /* 清零输出矩阵数据. */
    memset(arm_math_output_V_f32, 0, sizeof(float32_t) * MATH_INPUT_ARRAY_LEN );

    /* 使用PowerQuad计算. */
    PQ_SetFormat(POWERQUAD, kPQ_CP_MTX, kPQ_Float);
    TimerCount_Start();  /* 开始计时. */
    PQ_VectorEtonxF32(  arm_math_input_V1_f32,
                        arm_math_output_V_f32,
                        MATH_INPUT_ARRAY_LEN );
    TimerCount_Stop(tick_counter_val); /* 结束计时. */

    /* 打印计算结果. */
    for (uint32_t i = 0u; i < MATH_INPUT_ARRAY_LEN; i++)
    {
        if ( (i % 8) == 0 )
        {
            PRINTF("\r\n");
        }
        PRINTF("%8f, ", arm_math_output_V_f32[i]);
    }
    PRINTF("\r\n");
    PRINTF("done with %d us.\r\n\r\n", tick_counter_val/96u); /* 打印计算时间. */
}

/* EOF. */

